package nginx

import (
    "github.com/tufanbarisyildirim/gonginx"
    "path"
    "strings"
)

type NgxConfig struct {
    FileName  string         `json:"file_name"`
    Name      string         `json:"name"`
    Upstreams []*NgxUpstream `json:"upstreams"`
    Servers   []*NgxServer   `json:"servers"`
    Custom    string         `json:"custom"`
    c         *gonginx.Config
}

type NgxServer struct {
    Directives []*NgxDirective `json:"directives"`
    Locations  []*NgxLocation  `json:"locations"`
    Comments   string          `json:"comments"`
}

type NgxUpstream struct {
    Name       string          `json:"name"`
    Directives []*NgxDirective `json:"directives"`
    Comments   string          `json:"comments"`
}

type NgxDirective struct {
    Directive string `json:"directive"`
    Params    string `json:"params"`
    Comments  string `json:"comments"`
}

type NgxLocation struct {
    Path     string `json:"path"`
    Content  string `json:"content"`
    Comments string `json:"comments"`
}

func (d *NgxDirective) Orig() string {
    return d.Directive + " " + d.Params
}

func (d *NgxDirective) TrimParams() {
    d.Params = strings.TrimRight(strings.TrimSpace(d.Params), ";")
    return
}

func NewNgxServer() *NgxServer {
    return &NgxServer{
        Locations:  make([]*NgxLocation, 0),
        Directives: make([]*NgxDirective, 0),
    }
}

func NewNgxConfig(filename string) *NgxConfig {
    return &NgxConfig{
        FileName:  filename,
        Upstreams: make([]*NgxUpstream, 0),
        Name:      path.Base(filename),
    }
}
